package com.geek.javase.ch17.work.tcpwork.tcp6;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

/*
 *@Date 2025/11/4
 *@Author wangpeng
 *@Description
 * * 写入线程类 - 负责向服务器Socket写入数据
 * 实现Runnable接口，用于处理用户输入并发送消息到服务器
 * 采用"读写撤离"设计模式，专门负责写入操作
 */
public class WriteThread implements Runnable {
    // 服务器Socket连接对象，用于与服务器通信
    private Socket socket;
    //构造函数 服务器Socket连接对象
    public WriteThread(Socket socket) {
        this.socket = socket;
    }

    // 线程执行方法
    // 持续读取用户输入并发送给服务器
    //当用户输入"exit"时终止线程
    @Override
    public void run() {
        try(
               Scanner sc = new Scanner(System.in);
               // 创建打印写入器，包装Socket的输出流以便向服务器发送数
               PrintWriter pw = new PrintWriter(socket.getOutputStream());
        ){
            while(true){
                System.out.println("请说：");
                String line = sc.nextLine();
                // 将用户输入发送给服务器
                pw.println(line);
                // 强制刷新输出流，确保消息立即发送
                pw.flush();

                if(line.equals("exit")){
                    break;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            // 确保Socket连接被正确关闭
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
        }
    }
}
